In communication networks, the process of adjusting the flow of data, which is commonly transmitted as data packets, from one network device or node to another is referred to as flow control. Flow control is necessary to ensure that the receiving device can handle all of the incoming data, especially when the sending device is capable of sending data faster than the receiving device can use it.
In most networks, when there is a transfer of data between two devices operating at different speeds, a buffer is used to temporarily store the incoming data until the receiving device is ready to process it. Buffers have limited storage capacity and, consequently, flow control mechanisms are employed to prevent incoming data packets from being lost or dropped due to a lack of free space in the buffer.
A common flow control mechanism (or protocol) used for asynchronous communication in a network is called XON/XOFF. In accordance with this protocol, the receiving device sends a data packet containing an XOFF message to the sending device when the receiver's buffer is full. Such a data packet is called a flow control packet. A flow control packet is limited to a small number of bits and only contains enough information to describe the state of data flow. The sending device then discontinues the transmission of data. After a predetermined period of time, if the receiving device is ready to receive more data, it transmits a flow control packet containing an XON message to the sending device and data transmission is resumed.